﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Reflection;
using System.Web.UI;

namespace SFast
{
    public static class WebExtensions
    {
        #region Request扩展函数 _GetForm  对象反射方式从表单中获取对象属性所相应值
        /// <summary>
        /// 对象反射方式从表单中获取对象属性所相应值
        /// </summary>
        /// <typeparam name="T">反射对象</typeparam>
        /// <param name="request">HttpRequest 对象 </param>
        /// <returns></returns>
        //public static T _GetForm<T>(this HttpRequest request)
        //    where T : class,new()
        //{
        //    Type t = typeof(T);   //对象反射
        //    T nt = new T();  //创建一个新的对象
        //    //遍历对象的所有属性 给对象的属性复制
        //    Array.ForEach<PropertyInfo>(t.GetProperties(), p =>
        //    {
        //        if (!string.IsNullOrEmpty(request[p.Name]))
        //        {
        //            string oriValue = request[p.Name];
        //            object objValue = null;
        //            //给值封装，确保给对象的属性复制时，数据类型相对应
        //            if (p.PropertyType.IsGenericType)  //判断是否为泛型类型
        //            {
        //                if (p.PropertyType.GetGenericTypeDefinition().FullName == "System.Nullable`1")
        //                {
        //                    if (p.PropertyType.GetGenericArguments()[0].Name == "Boolean")
        //                    {
        //                        if (oriValue == "0" || oriValue.ToLower() == "false")
        //                        {
        //                            oriValue = "false";
        //                        }
        //                        else
        //                        {
        //                            oriValue = "true";
        //                        }
        //                    }
        //                    objValue = Convert.ChangeType(oriValue, p.PropertyType.GetGenericArguments()[0]);
        //                }
        //                else
        //                {
        //                    throw new Exception("不识别的泛型类型。");
        //                }
        //            }
        //            else
        //            {
        //                if (p.PropertyType.Name == "Boolean")
        //                {
        //                    if (oriValue == "0" || oriValue.ToLower() == "false")
        //                    {
        //                        oriValue = "false";
        //                    }
        //                    else
        //                    {
        //                        oriValue = "true";
        //                    }
        //                }
        //                objValue = Convert.ChangeType(oriValue, p.PropertyType);
        //            }
        //            p.SetValue(nt, objValue, null);  //给对象类型赋值
        //        }
        //    });
        //    return nt;
        //}

        #endregion

        #region _WriteEnd()     将一个字符串写入http响应流，并结束程序
        /// <summary>
        /// 将一个字符串写入http响应流，并结束程序 
        /// </summary>
        /// <param name="response"></param>
        /// <param name="s"></param>
        public static void _WriteEnd(this HttpResponse response,String s)
        {
            response.Write(s);
            response.End();
            //HttpContext.Current.ApplicationInstance.CompleteRequest();
            //Context.ApplicationInstance.CompleteRequest()
        }
        #endregion
    }
}
